#include "Cond.h"

#include <iostream>
#include <assert.h>

using namespace std;

/*
 * Esta clase es un wrapper del pthread_cond, las variables de condición.
 * Facilita la comprensión del código agrupando el control de errores
 * en un solo lugar.
 */

Cond::Cond() {
	int err = pthread_cond_init(&this->pthread_cond, NULL);
	if (err != 0)
		cerr << "Error al crear la variable de condición" << endl;
	assert(err == 0);
}

Cond::~Cond() {
	int err = pthread_cond_destroy(&this->pthread_cond);
	if (err != 0)
		cerr << "Error al destruir la variable de condición" << endl;
	assert(err == 0);
}

void Cond::wait(Mutex* mutex) {
	int err = pthread_cond_wait(&this->pthread_cond, &mutex->pthread_mutex);
	if (err != 0)
		cerr << "Error al esperar la variable de condición" << endl;
	assert(err == 0);
}

void Cond::signal() {
	int err = pthread_cond_signal(&this->pthread_cond);
	if (err != 0)
		cerr << "Error al despertar la variable de condición" << endl;
	assert(err == 0);
}

